package com.panvan.android;

import android.app.AlertDialog;
import android.app.UiModeManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.webkit.ValueCallback;
import android.webkit.WebSettings;
import android.webkit.WebView;

import androidx.webkit.WebSettingsCompat;

import com.panvan.android.BuildConfig;
import com.panvan.android.R;

import java.util.Date;

public class WebViewInit {
    Context context;
    WebView webView;
    MainActivity activity;
    WebSettings webSettings;

    WebViewInit(Context context, WebView webView, MainActivity activity){
        this.context=context;
        this.webView=webView;
        this.activity=activity;
        this.initWebView();
    }

    /**
     * 初始化webView
     */
    public void initWebView(){
        /**
         * 设置webview参数
         */
         webSettings =   this.setWebViewSetting();
        /**
         * 设置标题栏
         */
        setStatusBar(!isNight());
        setWebViewDark(isNight());

        /**
         * 設置js 支持
         */
        setJsProxy();

        setWebViewClient();
        /**
         * 設置下載
         */
        setWebViewDownLoad();

        /**
         * 动态设置webView 减去状态栏
         */
        setWebViewMarginTop();
    }
    private void setWebViewMarginTop(){
        View barHeight=activity.findViewById(R.id.barHeight);
        ViewGroup.LayoutParams layoutParams= barHeight.getLayoutParams();
        layoutParams.height=this.getStatusBarHeight(activity);
    }
    private int getStatusBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
//    public void webViewBack(){
//        webView.evaluateJavascript("javascript:_androidGoBackBySystemButton()", new ValueCallback<String>() {
//            @Override
//            public void onReceiveValue(String value) {
//                //此处为 js 返回的结果
//                if(value.equals("false") && BuildConfig.WEB_VIEW_CAN_BACK){
//                    new AlertDialog.Builder(activity)
//                    .setMessage("是否要退出当前应用?").setPositiveButton("是", new DialogInterface.OnClickListener() {
//                        @Override
//                        public void onClick(DialogInterface dialog, int which) {
//                          activity.onBackPressed();
//                        }
//                    })
//                    .setNegativeButton("否", null)
//                    .show();
//                }
//            }
//        });
//    }

    public WebSettings setWebViewSetting(){
        WebSettings webSettings = webView.getSettings();

        webSettings.setJavaScriptEnabled(true); //-> 是否开启JS支持
//        webSettings.setPluginsEnabled(true); //-> 是否开启插件支持
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //-> 是否允许JS打开新窗口
//
        webSettings.setUseWideViewPort(true); //-> 缩放至屏幕大小
        webSettings.setLoadWithOverviewMode(true); //-> 缩放至屏幕大小
        webSettings.setSupportZoom(false); //-> 是否支持缩放
        webSettings.setBuiltInZoomControls(false); //-> 是否支持缩放变焦，前提是支持缩放
        webSettings.setDisplayZoomControls(false); //-> 是否隐藏缩放控件
//
        webSettings.setAllowFileAccess(true); //-> 是否允许访问文件
        webSettings.setAllowContentAccess(true); //-> 是否允许访问文件
        webSettings.setAllowUniversalAccessFromFileURLs(true); //->允许跨域
        webSettings.setDomStorageEnabled(true); //-> 是否节点缓存
        webSettings.setDatabaseEnabled(true); //-> 是否数据缓存

        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //设置缓存模式

        webSettings.setAllowFileAccessFromFileURLs(true);
//        webSettings.setAppCacheEnabled(false); //-> 是否应用缓存
//        String uri = getApplicationContext().getCacheDir().getAbsolutePath();
//        webSettings.setAppCachePath(uri); //-> 设置缓存路径
//
//        webSettings.setMediaPlaybackRequiresUserGesture(false); //-> 是否要手势触发媒体
//        webSettings.setStandardFontFamily("sans-serif"); //-> 设置字体库格式
//        webSettings.setFixedFontFamily("monospace"); //-> 设置字体库格式
//        webSettings.setSansSerifFontFamily("sans-serif"); //-> 设置字体库格式
//        webSettings.setSerifFontFamily("sans-serif"); //-> 设置字体库格式
//        webSettings.setCursiveFontFamily("cursive"); //-> 设置字体库格式
//        webSettings.setFantasyFontFamily("fantasy"); //-> 设置字体库格式
        webSettings.setTextZoom(100); //-> 设置文本缩放的百分比
        webSettings.setMinimumFontSize(8); //-> 设置文本字体的最小值(1~72)
        webSettings.setDefaultFontSize(16); //-> 设置文本字体默认的大小

        return webSettings;
    }

    /**
     * 是否是深色模式
     * @return
     */
    protected boolean isNight() {
        UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE);
        return uiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_YES;
    }


    /**
     * 状态栏文字图标颜色
     *
     * @param dark 深色 false 为浅色
     */
    protected void setStatusBar(boolean dark) {
        View decor = activity.getWindow().getDecorView();
        if (dark) {
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }
    }

    /**
     * 設置webview對應的深色主題
     */
    private void setWebViewDark(boolean dark) {
        try {

            if (dark) {
                WebSettingsCompat.setForceDark(webSettings, WebSettingsCompat.FORCE_DARK_ON);
            } else {
                WebSettingsCompat.setForceDark(webSettings, WebSettingsCompat.FORCE_DARK_OFF);
            }
        } catch (Exception e) {
        }
    }



    /**
     * 設置下載
     */
    private void setWebViewDownLoad(){
//        WebViewDownloadListener webViewDownloadListener=new WebViewDownloadListener(this.context);
//        webView.setDownloadListener(webViewDownloadListener);
//        webView.setDownloadListener(new DownloadListener() {
//            @Override
//            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
//                Intent intent = new Intent(Intent.ACTION_VIEW);
//                intent.setData(Uri.parse(url));
//                activity.startActivity(intent);
//            }
//        });
    }

    /**
     * 設置js 支持
     */
    private void setJsProxy(){
        webSettings.setJavaScriptEnabled(true);
        WebViewJsBridge jsBridge=new WebViewJsBridge(this.activity);
        webView.addJavascriptInterface(jsBridge,"nativeJS");
        webView.loadUrl(getMainUrl());

//        webViewBack();

    }

    /**
     * 获取入口URL
     * @return
     */
    private String getMainUrl(){
        String url=BuildConfig.MAIN_URL;
        if(url.indexOf("?")>0){
            return url+"&hash="+new Date().getTime();
        }
        return url+"?hash="+new Date().getTime();
    }

    private void setWebViewClient(){
        webView.setWebViewClient(new WebViewClientListener());
    }
}
